#!/bin/bash

# script de contrôle
# ce script doit être lancé par l'utilisateur

ERAWRIM_PATH=~/.erawrim
DEVICE=""
ANNUAIRE=$ERAWRIM_PATH/annuaire
LOG=$ERAWRIM_PATH/log


log ()
{
  echo "$(date);$1" >> $LOG
}

prepare_home ()
{
  if [ ! -e $ERAWRIM_PATH ]
  then 
    mkdir $ERAWRIM_PATH
    #ce fichier précise l'état du mirror
    echo endroit > $ERAWRIM_PATH/etat_mirror
    
    #ce fichier associe un identifiant de tag à un nom
    touch $ANNUAIRE
    touch $LOG
    
    #ce dossier contient la liste des ztamps posés à un instant t
    if [ ! -e $ERAWRIM_PATH/ztamps ]; then mkdir $ERAWRIM_PATH/ztamps; fi;
    
    # gestionnaires de l'orientation du Mir:ror
    if [ ! -e $ERAWRIM_PATH/endroit.sh ]; then echo "#!/bin/bash" > $ERAWRIM_PATH/endroit.sh; fi;
    if [ ! -e $ERAWRIM_PATH/envers.sh ]; then echo "#!/bin/bash" > $ERAWRIM_PATH/envers.sh; fi;
    
    chmod +x $ERAWRIM_PATH/endroit.sh $ERAWRIM_PATH/envers.sh
    
    # gestionnaires par défaut pour les ztamps
    if [ ! -e $ERAWRIM_PATH/defaut/pose.sh ];
    then
		echo "#!/bin/bash" > $ERAWRIM_PATH/defaut/pose.sh;
		echo "# Gestionnaire par défaut lors de la pose d'un Ztamp" >> $ERAWRIM_PATH/defaut/pose.sh;
	fi;
    if [ ! -e $ERAWRIM_PATH/defaut/retire.sh ];
    then
		echo "#!/bin/bash" > $ERAWRIM_PATH/defaut/retire.sh;
		echo "# Gestionnaire par défaut lors du retrait d'un Ztamp" >> $ERAWRIM_PATH/defaut/retire.sh;
		cat >> $ERAWRIM_PATH/defaut/retire.sh << EOF
# Handle .authtag used by pam_reflect
# pam_reflect allows authentication when tag is inserted,
# and here, we manage to lock screen when tag is removed.
if [ -r $HOME/.authtag -a "$1" = "`cat $HOME/.authtag`" ]
then
	# Verrouiller l'écran
	# Fonctionne pour le bureau Gnome
	# gnome-screensaver-command -l

	# Sur bureau récent
	# dbus-send --session --dest=org.freedesktop.ScreenSaver \
	# --type=method_call --print-reply /ScreenSaver \
	# org.freedesktop.ScreenSaver.Lock
fi
EOF
	fi;
    
    chmod +x $ERAWRIM_PATH/defaut/pose.sh $ERAWRIM_PATH/defaut/retire.sh
    
  fi
}

associe_tag_nom ()
{
  ZTAMP_NAME=$(cat $ERAWRIM_PATH/annuaire | grep ^$1 | cut -d ':' -f 2)
}

add ()
{
  associe_tag_nom $1
  if [ -z $ZTAMP_NAME ]	#ztamp inconnu
  then
    until [ ! -z $ZTAMP_NAME ]; do
      #choisir l'un ou l'autre
      read -p "Ce ztamp est inconnu, veuillez le nommer:" ZTAMP_NAME
#      ZTAMP_NAME=$(Xdialog --stdout --inputbox "Ce ztamp est inconnu, veuillez le nommer:" 0 0)
    done
    echo $1:$ZTAMP_NAME >> $ERAWRIM_PATH/annuaire
    mkdir $ERAWRIM_PATH/$ZTAMP_NAME
    
    echo "#!/bin/bash" > $ERAWRIM_PATH/$ZTAMP_NAME/pose.sh
    chmod +x $ERAWRIM_PATH/$ZTAMP_NAME/pose.sh
    echo "#!/bin/bash" > $ERAWRIM_PATH/$ZTAMP_NAME/retire.sh
    chmod +x $ERAWRIM_PATH/$ZTAMP_NAME/retire.sh
    touch $ERAWRIM_PATH/$ZTAMP_NAME/lasttime
    touch $ERAWRIM_PATH/$ZTAMP_NAME/times
    
    echo 0 > $ERAWRIM_PATH/$ZTAMP_NAME/times
    date > $ERAWRIM_PATH/$ZTAMP_NAME/lasttime
    
    touch $ERAWRIM_PATH/ztamps/$ZTAMP_NAME
  fi
}

remove ()
{
  #associe_tag_nom $1
  if cat $ANNUAIRE  | grep "$1\$"
  then
    ZTAMP_NAME=$1
    rm -r $ERAWRIM_PATH/$ZTAMP_NAME
    cat $ANNUAIRE  | grep $ZTAMP_NAME$ > /tmp/remove_ztamp
    diff /tmp/remove_ztamp $ANNUAIRE  | cut -d ' ' -f 2 | tail -n $(($(diff /tmp/remove_ztamp $ANNUAIRE | wc -l) - 1)) > $ANNUAIRE
    rm /tmp/remove_ztamp
    log "$ZTAMP_NAME a été supprimé."
  else
    log "$1 n'existe pas."
  fi
}

start ()
{
	if [ -e $ERAWRIM_PATH/erawrim.pid ]
	then
		echo "On dirait que le process tourne déjà." >&2
		echo "Faire un stop avant de recommencer." >&2
		return
	fi
	# On suppose que le daemon est accessible comme l'utilitaire de configuration
	DAEMON=`echo $0 | sed 's/-ctl//'`
	setsid $DAEMON </dev/null >/dev/null 2>/dev/null &
	echo $! > $ERAWRIM_PATH/erawrim.pid
}

stop ()
{
	if [ -e $ERAWRIM_PATH/erawrim.pid ]
	then
		PID=`cat $ERAWRIM_PATH/erawrim.pid`
		test -z "$PID" || kill -TERM -$PID
		rm $ERAWRIM_PATH/erawrim.pid
	else
		echo "On dirait que le process ne tourne pas." >&2
	fi
}

prepare_home

case $1 in
  "start" ) start;;
  "stop" ) stop;;
  "add" ) add "$2";;
  "remove" ) remove "$2";;
  * ) echo impossible;;
esac
